package com.ssy.lingxi.member.merchant.service.base;

import com.ssy.lingxi.common.response.Wrapper;
import com.ssy.lingxi.member.merchant.model.vo.basic.request.EmailVO;
import com.ssy.lingxi.member.merchant.model.vo.basic.request.PayPasswordVO;
import com.ssy.lingxi.member.merchant.model.vo.basic.request.PhoneVO;
import com.ssy.lingxi.member.merchant.model.vo.basic.request.SmsCodeVO;
import com.ssy.lingxi.member.merchant.model.vo.maintenance.request.UserUpdateEmailVO;
import com.ssy.lingxi.member.merchant.model.vo.maintenance.request.UserUpdatePasswordVO;
import com.ssy.lingxi.member.merchant.model.vo.maintenance.request.UserUpdatePayPasswordVO;
import com.ssy.lingxi.member.merchant.model.vo.maintenance.request.UserUpdatePhoneVO;
import com.ssy.lingxi.member.merchant.model.vo.maintenance.response.UserAccountSecurityQueryVO;

/**
 * 用户账号安全服务接口
 * @author 万宁
 * @version 2.0.0
 * @date 2020-07-06
 */
public interface IBaseAccountSecurityService {

    /**
     * “账户安全”页面，查询用户的手机号码和邮箱，以掩码方式返回
     * @param userId 用户Id
     * @return 操作结果
     */
    Wrapper<UserAccountSecurityQueryVO> getPhoneAndEmail(Long userId);

    /**
     * （通用）检查支付密码是否正确
     * @param memberId 会员Id
     * @param payPasswordVO 接口参数
     * @return 操作结果
     */
    Wrapper<Void> checkPayPassword(Long memberId, PayPasswordVO payPasswordVO);

    /**
     * 修改登录密码（手机校验码验证）时，发送手机短信验证码
     * @param userId 用户Id
     * @return 操作结果
     */
    Wrapper<Void> sendChangePasswordSmsCode(Long userId);

    /**
     * 修改登录密码（手机校验码验证）时，检查手机短信验证码是否正确
     * @param userId 用户Id
     * @param smsCodeVO 接口参数
     * @return 操作结果
     */
    Wrapper<Void> checkChangePasswordSmsCode(Long userId, SmsCodeVO smsCodeVO);

    /**
     * 修改登录密码（邮箱验证）时，发送邮件验证码
     * @param userId 用户Id
     * @return 发送结果
     */
    Wrapper<Void> sendChangePasswordEmailCode(Long userId);

    /**
     * 修改登录密码（邮箱验证）时，检查邮件验证码是否正确
     * @param userId 用户Id
     * @param smsCodeVO 接口参数
     * @return 发送结果
     */
    Wrapper<Void> checkChangePasswordEmailCode(Long userId, SmsCodeVO smsCodeVO);

    /**
     * 修改登录密码
     * @param userId 用户Id
     * @param userManageVO 接口参数
     * @return 操作结果
     */
    Wrapper<Void> changePassword(Long userId, UserUpdatePasswordVO userManageVO);

    /**
     * 修改邮箱（手机校验码验证）时，发送手机短信验证码
     * @param userId 用户Id
     * @return 操作结果
     */
    Wrapper<Void> sendChangeEmailSmsCode(Long userId);

    /**
     * 修改邮箱（手机校验码验证）时，检查手机短信验证码是否正确
     * @param userId 用户Id
     * @param smsCodeVO 接口参数
     * @return 验证结果
     */
    Wrapper<Void> checkChangeEmailSmsCode(Long userId, SmsCodeVO smsCodeVO);

    /**
     * 修改邮箱（邮箱验证）时，发送邮件验证码
     * @param userId 用户Id
     * @return 发送结果
     */
    Wrapper<Void> sendChangeEmailEmailCode(Long userId);

    /**
     * 修改邮箱（邮箱验证）时，检查邮件验证码是否正确
     * @param userId 用户Id
     * @param smsCodeVO 接口参数
     * @return 发送结果
     */
    Wrapper<Void> checkChangeEmailEmailCode(Long userId, SmsCodeVO smsCodeVO);

    /**
     * 修改邮箱时，向新邮箱发送邮件验证码
     * @param userId 用户Id
     * @param emailVO 接口参数
     * @return 发送结果
     */
    Wrapper<Void> sendChangeEmailEmailCodeToNew(Long userId, EmailVO emailVO);

    /**
     * 修改邮箱
     * @param userId 用户Id
     * @param loginSource 登录来源
     * @param userManageVO 接口参数
     * @return 操作结果
     */
    Wrapper<Void> changeEmail(Long userId, Integer loginSource, UserUpdateEmailVO userManageVO);

    /**
     * 修改手机号码（手机校验码验证）时，发送手机短信验证码
     * @param userId 用户Id
     * @return 操作结果
     */
    Wrapper<Void> sendChangePhoneSmsCode(Long userId);

    /**
     * 修改手机号码（手机校验码验证）时，检查手机短信验证码是否正确
     * @param userId 用户Id
     * @param smsCodeVO 接口参数
     * @return 操作结果
     */
    Wrapper<Void> checkChangePhoneSmsCode(Long userId, SmsCodeVO smsCodeVO);

    /**
     * 修改手机号码（邮箱验证）时，发送邮件验证码
     * @param userId 用户Id
     * @return 操作结果
     */
    Wrapper<Void> sendChangePhoneEmailCode(Long userId);

    /**
     * 修改手机号码（邮箱验证）时，检查邮件验证码是否正确
     * @param userId 用户Id
     * @param smsCodeVO 接口参数
     * @return 操作结果
     */
    Wrapper<Void> checkChangePhoneEmailCode(Long userId, SmsCodeVO smsCodeVO);

    /**
     * 修改手机号码时，向新手机号码发送短信验证码
     * @param userId 用户Id
     * @param loginSource 登录来源
     * @param phoneVO 接口参数
     * @return 操作结果
     */
    Wrapper<Void> sendChangePhoneSmsCodeToNew(Long userId, Integer loginSource, PhoneVO phoneVO);

    /**
     * 修改手机号
     * @param userId 用户Id
     * @param loginSource 登录来源
     * @param userManageVO 接口参数
     * @return 操作结果
     */
    Wrapper<Void> changePhone(Long userId, Integer loginSource, UserUpdatePhoneVO userManageVO);

    /**
     * 重置支付密码时，发送手机短信验证码
     * @param userId 用户Id
     * @return 操作结果
     */
    Wrapper<Void> sendChangePayPswSmsCode(Long userId);

    /**
     * 重置支付密码时，检查手机短信验证码是否正确
     * @param userId 用户Id
     * @param smsCodeVO 接口参数
     * @return 操作结果
     */
    Wrapper<Void> checkChangePayPswSmsCode(Long userId, SmsCodeVO smsCodeVO);

    /**
     * 手机校验码验证后，修改支付密码
     * @param userId 用户Id
     * @param userManageVO 接口参数
     * @return 操作结果
     */
    Wrapper<Void> changePayPassword(Long userId, UserUpdatePayPasswordVO userManageVO);
}
